package com.hello.system.service;

import java.util.List;
import java.util.Map;
import com.hello.system.domain.UserTemplateUsage;

/**
 * 用户模板使用记录Service接口
 * 
 */
public interface IUserTemplateUsageService 
{
    /**
     * 查询用户模板使用记录
     * 
     * @param id 用户模板使用记录主键
     * @return 用户模板使用记录
     */
    public UserTemplateUsage selectUserTemplateUsageById(Long id);

    /**
     * 查询用户模板使用记录列表
     * 
     * @param userTemplateUsage 用户模板使用记录
     * @return 用户模板使用记录集合
     */
    public List<UserTemplateUsage> selectUserTemplateUsageList(UserTemplateUsage userTemplateUsage);

    /**
     * 新增用户模板使用记录
     * 
     * @param userTemplateUsage 用户模板使用记录
     * @return 结果
     */
    public int insertUserTemplateUsage(UserTemplateUsage userTemplateUsage);

    /**
     * 修改用户模板使用记录
     * 
     * @param userTemplateUsage 用户模板使用记录
     * @return 结果
     */
    public int updateUserTemplateUsage(UserTemplateUsage userTemplateUsage);

    /**
     * 批量删除用户模板使用记录
     * 
     * @param ids 需要删除的用户模板使用记录主键集合
     * @return 结果
     */
    public int deleteUserTemplateUsageByIds(Long[] ids);

    /**
     * 删除用户模板使用记录信息
     * 
     * @param id 用户模板使用记录主键
     * @return 结果
     */
    public int deleteUserTemplateUsageById(Long id);
    
    /**
     * 检查用户使用模板是否免费
     * 
     * @param userId 用户ID
     * @param templateId 模板ID
     * @return 是否免费
     */
    public boolean isFreeTemplateUsage(Long userId, Long templateId);
    
    /**
     * 记录用户使用模板
     * 
     * @param userId 用户ID
     * @param templateId 模板ID
     * @return 结果
     */
    public int recordTemplateUsage(Long userId, Long templateId);
    
    /**
     * 获取用户使用模板次数
     * 
     * @param userId 用户ID
     * @param templateId 模板ID
     * @return 使用次数
     */
    public int getUsageCount(Long userId, Long templateId);
    
    /**
     * 获取用户对所有模板的使用情况
     * 
     * @param userId 用户ID
     * @return 模板ID与使用次数的映射
     */
    public Map<Long, Integer> getUserAllTemplateUsage(Long userId);

    /**
     * 获取用户总使用模板次数
     *
     * @param userId 用户ID
     * @return 使用次数
     */
    public int getTotalUsageCount(Long userId);
} 